﻿namespace Algo.CodeContracts
{
    using System;
    using System.Collections.Generic;
    using System.Diagnostics.Contracts;

    [ContractClassFor(typeof(ISortStrategy))]
    internal abstract class SortStrategyCodeContracts : ISortStrategy
    {
        public IEnumerable<T> Sort<T>(IEnumerable<T> items, IComparer<T> comparer, IAlgoExtensions extensions)
        {
            Contract.Requires<ArgumentNullException>(items != null);
            Contract.Requires<ArgumentNullException>(comparer != null);
            Contract.Requires<ArgumentNullException>(extensions != null);
            Contract.Ensures(Contract.Result<IEnumerable<T>>() != null);

            return default(IEnumerable<T>);
        }
    }
}
